{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "af6cae68-309a-44f6-9890-67f84dfb4762",
   "metadata": {},
   "outputs": [],
   "source": [
    "import requests\n",
    "import json\n",
    "from pprint import pprint\n",
    "from datetime import datetime"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a47dba3a-43ff-41f5-9095-94d8c254f6b3",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "1bf3061d-7823-42c9-a90b-29ebfd3b079f",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "b8567c61-0946-4455-8df6-2e8c9c42fcf9",
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_token():\n",
    "    oauth = \"y0_AgAAAAAdy8jaAATuwQAAA8SG3Xh2A\"\n",
    "    url = 'https://iam.api.cloud.yandex.net/iam/v1/tokens'\n",
    "    headers = {\n",
    "        \"Content-Type\": \"application/json\"\n",
    "    }\n",
    "    data=json.dumps({\"yandexPassportOauthToken\": oauth})\n",
    "    res = requests.post(url, data=data, headers=headers)\n",
    "    return res.json()['iamToken']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "467e48d5-8cc5-42c2-97b8-904105ffc0ac",
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_answer(system, user, temp):\n",
    "    folder = 'b1gqlhmqdst9ejbptsnp'\n",
    "    temperature = temp\n",
    "    maxTokens = \"1000\"\n",
    "    system_message = system\n",
    "    user_message = user\n",
    "    \n",
    "    body = {\n",
    "      \"modelUri\": f\"gpt://{folder}/yandexgpt/latest\",\n",
    "      \"completionOptions\": {\n",
    "        \"stream\": False,\n",
    "        \"temperature\": temperature,\n",
    "        \"maxTokens\": maxTokens\n",
    "      },\n",
    "      \"messages\": [\n",
    "        {\n",
    "          \"role\": \"system\",\n",
    "          \"text\": system_message\n",
    "        },\n",
    "        {\n",
    "          \"role\": \"user\",\n",
    "          \"text\": user_message\n",
    "        }\n",
    "      ]\n",
    "    }\n",
    "    \n",
    "    url = 'https://llm.api.cloud.yandex.net/foundationModels/v1/completion'\n",
    "    \n",
    "    headers = {\n",
    "        \"Authorization\": f\"Bearer {get_token()}\",\n",
    "        \"Content-Type\": \"application/json\"\n",
    "    }\n",
    "    data = json.dumps(body)\n",
    "    \n",
    "    res = requests.post(url, data=data, headers=headers)\n",
    "\n",
    "    return res.json()['result']['alternatives'][0]['message']['text']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "74d487a5-cb99-403c-b019-4bfd29741889",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Promt \n",
      "Ты опытный аналитик данных, который занимается поиском зависимости значений Переменных (Sex, Pclass, Age) от переменной Importance.\n",
      "Дерево решений, которое ты обучил, выдало тебе набор правил. \n",
      "Категоризируй правила по следующим категориям:\n",
      "HIGH - Значения Importance принадлежит отрезку [-1.3, -0.9) или отрезку (1.6, 2.3];\n",
      "MID - Значения Importance принадлежит отрезку [-0.9, -0.5) или отрезку (0.9, 1.6];\n",
      "LOW - Значения Importance принадлежит отрезку [-0.5, 0.9];\n",
      "В ответ выведи список категорий со списком правил, которые к ним относятся.\n",
      "Не используй таблицы.\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "**HIGH**:\n",
      "* Правило 1: Если (Sex <= 0.5) И (Pclass <= 2.5) И (Age > 10.5), то Importance равна 2.33;\n",
      "* Правило 2: Если (Sex <= 0.5) И (Pclass > 2.5) И (Age > 12.0), то Importance равна 1.67.\n",
      "\n",
      "**MID**:\n",
      "* Правило 3: Если (Sex <= 0.5) И (Pclass <= 2.5) И (Age <= 10.5), то Importance равна 1.61;\n",
      "* Правило 6: Если (Sex <= 0.5) И (Pclass > 2.5) И (Age <= 12.0), то Importance равна 0.88.\n",
      "\n",
      "**LOW**:\n",
      "* Правило 4: Если (Sex > 0.5) И (Pclass <= 2.5) И (Age > 13.5), то Importance равна -1.3;\n",
      "* Правило 5: Если (Sex > 0.5) И (Pclass > 2.5) И (Age > 13.0), то Importance равна -0.97;\n",
      "* Правило 7: Если (Sex > 0.5) И (Pclass <= 2.5) И (Age <= 13.5), то Importance равна -0.82;\n",
      "* Правило 8: Если (Sex > 0.5) И (Pclass > 2.5) И (Age <= 13.0), то Importance равна -0.5.\n"
     ]
    }
   ],
   "source": [
    "imp = [-0.968, -1.302, 2.335, 1.673, -0.499, 0.88, -0.823, 1.611]\n",
    "imp = [round(x, 1) for x in imp]\n",
    "high_left = min(imp)\n",
    "high_right = max(imp)\n",
    "\n",
    "low_left = max([x for x in imp if x < 0])\n",
    "low_right = min([x for x in imp if x > 0])\n",
    "\n",
    "mid_left = round((high_left + low_left) / 2, 2)\n",
    "mid_right = round((high_right + low_right) / 2, 2)\n",
    "\n",
    "# \n",
    "\n",
    "# Ответь в формате json слещующего образца {{\"HIGH\": <Список правил>, \"MID\": <Список правил>, \"LOW\": <Список правил>}}\n",
    "\n",
    "system = f\"\"\"\n",
    "Ты опытный аналитик данных, который занимается поиском зависимости значений Переменных (Sex, Pclass, Age) от переменной Importance.\n",
    "Дерево решений, которое ты обучил, выдало тебе набор правил. \n",
    "Категоризируй правила по следующим категориям:\n",
    "HIGH - Значения Importance принадлежит отрезку [{high_left}, {mid_left}) или отрезку ({mid_right}, {high_right}];\n",
    "MID - Значения Importance принадлежит отрезку [{mid_left}, {low_left}) или отрезку ({low_right}, {mid_right}];\n",
    "LOW - Значения Importance принадлежит отрезку [{low_left}, {low_right}];\n",
    "В ответ выведи список категорий со списком правил, которые к ним относятся.\n",
    "Не используй таблицы.\n",
    "\"\"\"\n",
    "\n",
    "print(\"Promt\", system)\n",
    "print('\\n\\n')\n",
    "\n",
    "user = \"\"\"\n",
    "1. Если (Sex <= 0.5) И (Pclass <= 2.5) И (Age > 10.5) то Importance равна 2.33;\n",
    "2. Если (Sex <= 0.5) И (Pclass > 2.5) И (Age > 12.0) то Importance равна 1.67;\n",
    "3. Если (Sex <= 0.5) И (Pclass <= 2.5) И (Age <= 10.5) то Importance равна 1.61;\n",
    "4. Если (Sex > 0.5) И (Pclass <= 2.5) И (Age > 13.5) то Importance равна -1.3;\n",
    "5. Если (Sex > 0.5) И (Pclass > 2.5) И (Age > 13.0) то Importance равна -0.97;\n",
    "6. Если (Sex <= 0.5) И (Pclass > 2.5) И (Age <= 12.0) то Importance равна 0.88;\n",
    "7. Если (Sex > 0.5) И (Pclass <= 2.5) И (Age <= 13.5) то Importance равна -0.82;\n",
    "8. Если (Sex > 0.5) И (Pclass > 2.5) И (Age <= 13.0) то Importance равна -0.5;\n",
    "\"\"\"\n",
    "temp = 0.4\n",
    "\n",
    "print(get_answer(system, user, temp))\n",
    "\n",
    "# for _ in range(5):\n",
    "#     print(_)\n",
    "#     print(get_answer(system, user, temp))\n",
    "#     print('\\n\\n\\n\\n\\n')\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "8a4dd325-0311-42f1-a0f7-53109c2bcabb",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Promt \n",
      "Ты опытный аналитик данных, который занимается поиском зависимости значений Переменных (Sex, Pclass, Age) от переменной Importance.\n",
      "Дерево решений, которое ты обучил, выдало тебе набор правил. \n",
      "Категоризируй правила по значению переменной Importance, должны быть три категории - высокая, средняя и низкая важность\n",
      "В ответ выведи список категорий со списком правил, которые к ним относятся.\n",
      "Не используй таблицы.\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "**Высокая важность**:\n",
      "* Правило 1: если (Sex <= 0.5) И (Pclass <= 2.5) И (Age > 10.5), то Importance равна 2.33.\n",
      "\n",
      "**Средняя важность**:\n",
      "* Правило 6: если (Sex <= 0.5) И (Pclass > 2.5) И (Age <= 12.0), то Importance равна 0.88.\n",
      "\n",
      "**Низкая важность**:\n",
      "* Правило 3: если (Sex <= 0.5) И (Pclass <= 2.5) И (Age <= 10.5), то Importance равна 1.61.\n",
      "* Правило 6 можно также отнести к этой категории.\n",
      "\n",
      "Остальные правила относятся к категориям высокой или средней важности.\n",
      "\n",
      "*Примечание: в зависимости от того, как именно вы определяете категории важности, результат может отличаться.*\n",
      "0\n",
      "**Высокая важность:**\n",
      "* Если (Sex <= 0.5) И (Pclass <= 2.5) И (Age > 10.5), то Importance равна 2.33;\n",
      "* Если (Sex > 0.5) И (Pclass <= 2.5) И (Age <= 13.5), то Importance равна -1.3.\n",
      "\n",
      "**Средняя важность:**\n",
      "* Если (Sex <= 0.5) И (Pclass > 2.5) И (Age > 12.0), то Importance равна 1.67;\n",
      "* Если (Sex <= 0.5) И (Pclass <= 2.5) И (Age <= 10.5), то Importance равна 1.61;\n",
      "* Если (Sex > 0.5) И (Pclass > 2.5) И (Age > 13.0), то Importance равна -0.97.\n",
      "\n",
      "**Низкая важность:**\n",
      "* Если (Sex > 0.5) И (Pclass <= 2.5) И (Age <= 13.5), то Importance равна -0.82;\n",
      "* Если (Sex > 0.5) И (Pclass > 2.5) И (Age <= 13.0), то Importance равна -0.5.\n",
      "\n",
      "*В остальных случаях значение Importance не определено.*\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "0.2\n",
      "**Высокая важность**:\n",
      "\n",
      "— правило 1: если (Sex <= 0.5) И (Pclass <= 2.5) И (Age > 10.5), то Importance равна 2.33.\n",
      "\n",
      "**Средняя важность**:\n",
      "\n",
      "— правило 2: если (Sex <= 0.5) И (Pclass > 2.5) И (Age > 12.0), то Importance равна 1.67.\n",
      "\n",
      "— правило 6: если (Sex <= 0.5) И (Pclass > 2.5) И (Age <= 12.0), то Importance равна 0.88.\n",
      "\n",
      "**Низкая важность**:\n",
      "\n",
      "— правило 3: если (Sex <= 0.5) И (Pclass <= 2.5) И (Age <= 10.5), то Importance равна 1.61.\n",
      "\n",
      "— правило 7: если (Sex > 0.5) И (Pclass <= 2.5) И (Age <= 13.5), то Importance равна -0.82.\n",
      "\n",
      "**Остальные правила не относятся ни к одной из категорий важности.**\n",
      "\n",
      "*Важно отметить, что это лишь один из возможных способов категоризации правил. В зависимости от контекста и целей анализа, категории важности могут быть определены по-другому.*\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "0.4\n",
      "**Высокая важность**:\n",
      "* правило 1: если (Sex <= 0.5) И (Pclass <= 2.5) И (Age > 10.5), то Importance равна 2.33;\n",
      "* правило 3: если (Sex <= 0.5) И (Pclass <= 2.5) И (Age <= 10.5), то Importance равна 1.61.\n",
      "\n",
      "**Средняя важность**:\n",
      "* правило 2: если (Sex <= 0.5) И (Pclass > 2.5) И (Age > 12.0), то Importance равна 1.67;\n",
      "* правило 6: если (Sex <= 0.5) И (Pclass > 2.5) И (Age <= 12.0), то Importance равна 0.88.\n",
      "\n",
      "**Низкая важность**:\n",
      "* правило 4: если (Sex > 0.5) И (Pclass <= 2.5) И (Age > 13.5), то Importance равна -1.3;\n",
      "* правило 5: если (Sex > 0.5) И (Pclass > 2.5) И (Age > 13.0), то Importance равна -0.97;\n",
      "* правило 7: если (Sex > 0.5) И (Pclass <= 2.5) И (Age <= 13.5), то Importance равна -0.82;\n",
      "* правило 8: если (Sex > 0.5) И (Pclass > 2.5) И (Age <= 13.0), то Importance равна -0.5.\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "0.6\n",
      "**Высокая важность**:\n",
      "* Если (Sex <= 0.5) И (Pclass <= 2.5) И (Age > 10.5), то Importance равна 2.33.\n",
      "\n",
      "**Средняя важность**:\n",
      "* Если (Sex > 0.5) И (Pclass <= 2.5) И (Age <= 13.5), то Importance равна -0.82.\n",
      "* Если (Sex <= 0.5) И (Pclass > 2.5) И (Age <= 12.0), то Importance равна 0.88.\n",
      "\n",
      "**Низкая важность**:\n",
      "* Если (Sex > 0.5) И (Pclass > 2.5) И (Age > 13.0), то Importance равна -0.97.\n",
      "* Если (Sex <= 0.5) И (Pclass > 2.5) И (Age > 12.0), то Importance равна 1.67.\n",
      "* Если (Sex < 0.5) И (Pclass <= 2.5) И (Age <= 10.5), то Importance равна 1.61.\n",
      "* Если (Sex > 0.5) И (Pclass <= 2.5) И (Age > 13.5), то Importance равна -1.3.\n",
      "* Если (Sex > 0.5) И (Pclass > 2.5) И (Age > 13.0), то Importance равна -0.5.\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n"
     ]
    }
   ],
   "source": [
    "system = f\"\"\"\n",
    "Ты опытный аналитик данных, который занимается поиском зависимости значений Переменных (Sex, Pclass, Age) от переменной Importance.\n",
    "Дерево решений, которое ты обучил, выдало тебе набор правил. \n",
    "Категоризируй правила по значению переменной Importance, должны быть три категории - высокая, средняя и низкая важность\n",
    "В ответ выведи список категорий со списком правил, которые к ним относятся.\n",
    "Не используй таблицы.\n",
    "\"\"\"\n",
    "\n",
    "print(\"Promt\", system)\n",
    "print('\\n\\n')\n",
    "\n",
    "user = \"\"\"\n",
    "1. Если (Sex <= 0.5) И (Pclass <= 2.5) И (Age > 10.5) то Importance равна 2.33;\n",
    "2. Если (Sex <= 0.5) И (Pclass > 2.5) И (Age > 12.0) то Importance равна 1.67;\n",
    "3. Если (Sex <= 0.5) И (Pclass <= 2.5) И (Age <= 10.5) то Importance равна 1.61;\n",
    "4. Если (Sex > 0.5) И (Pclass <= 2.5) И (Age > 13.5) то Importance равна -1.3;\n",
    "5. Если (Sex > 0.5) И (Pclass > 2.5) И (Age > 13.0) то Importance равна -0.97;\n",
    "6. Если (Sex <= 0.5) И (Pclass > 2.5) И (Age <= 12.0) то Importance равна 0.88;\n",
    "7. Если (Sex > 0.5) И (Pclass <= 2.5) И (Age <= 13.5) то Importance равна -0.82;\n",
    "8. Если (Sex > 0.5) И (Pclass > 2.5) И (Age <= 13.0) то Importance равна -0.5;\n",
    "\"\"\"\n",
    "temp = 0.4\n",
    "\n",
    "print(get_answer(system, user, temp))\n",
    "\n",
    "for _ in [0, 0.2, 0.4, 0.6]:\n",
    "    print(_)\n",
    "    print(get_answer(system, user, temp))\n",
    "    print('\\n\\n\\n\\n\\n')\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "4f8f2044-ba45-4656-b2ce-f3b0084eef7e",
   "metadata": {},
   "outputs": [],
   "source": [
    "print(user)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "25a9155f-12ac-4acc-89e3-eb157b479079",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Promt \n",
      "Ты опытный аналитик данных, который занимается поиском зависимости значений переменных.\n",
      "Дерево решений, которое ты обучил, выдало тебе набор правил. \n",
      "Категоризируй правила по значению переменной Importance, должны быть три категории - высокая, средняя и низкая абсолютная важность.\n",
      "Способ категоризации - проверка абсолютного значения переменной I.\n",
      "В ответ выведи список категорий со списком правил, которые к ним относятся.\n",
      "Не используй таблицы.\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "**Высокая абсолютная важность**:\n",
      "* Правило 4: если (A > 0.5) И (B <= 2.5) И (E > 13.5), то I равна -1.3.\n",
      "* Правило 5: если (A > 0.5) И (B > 2.5) И (E > 13.0), то I равна -0.97.\n",
      "\n",
      "**Средняя абсолютная важность**:\n",
      "* Правило 2: если (A <= 0.5) И (B > 2.5) И (E > 12.0), то I равна 1.67.\n",
      "* Правило 6: если (A <= 0.5) И (B > 2.5) И (E <= 12.0), то I равна 0.88.\n",
      "* Правило 8: если (A > 0.5) И (B > 2.5) И (E <= 13.0), то I равна -0.5.\n",
      "\n",
      "**Низкая абсолютная важность**:\n",
      "* Правило 1: если (A <= 0.5) И (B <= 2.5) И (E > 10.5), то I равна 2.33.\n",
      "* Правило 3: если (A <= 0.5) И (B <= 2.5) И (E <= 10.5), то I равна 1.61.\n",
      "* Правило 7: если (A > 0.5) И (B <= 2.5) И (E <= 13.5), то I равна -0.82.\n"
     ]
    }
   ],
   "source": [
    "system = f\"\"\"\n",
    "Ты опытный аналитик данных, который занимается поиском зависимости значений переменных.\n",
    "Дерево решений, которое ты обучил, выдало тебе набор правил. \n",
    "Категоризируй правила по значению переменной Importance, должны быть три категории - высокая, средняя и низкая абсолютная важность.\n",
    "Способ категоризации - проверка абсолютного значения переменной I.\n",
    "В ответ выведи список категорий со списком правил, которые к ним относятся.\n",
    "Не используй таблицы.\n",
    "\"\"\"\n",
    "\n",
    "print(\"Promt\", system)\n",
    "print('\\n\\n')\n",
    "\n",
    "user = \"\"\"\n",
    "1. Если (Sex <= 0.5) И (Pclass <= 2.5) И (Age > 10.5) то Importance равна 2.33;\n",
    "2. Если (Sex <= 0.5) И (Pclass > 2.5) И (Age > 12.0) то Importance равна 1.67;\n",
    "3. Если (Sex <= 0.5) И (Pclass <= 2.5) И (Age <= 10.5) то Importance равна 1.61;\n",
    "4. Если (Sex > 0.5) И (Pclass <= 2.5) И (Age > 13.5) то Importance равна -1.3;\n",
    "5. Если (Sex > 0.5) И (Pclass > 2.5) И (Age > 13.0) то Importance равна -0.97;\n",
    "6. Если (Sex <= 0.5) И (Pclass > 2.5) И (Age <= 12.0) то Importance равна 0.88;\n",
    "7. Если (Sex > 0.5) И (Pclass <= 2.5) И (Age <= 13.5) то Importance равна -0.82;\n",
    "8. Если (Sex > 0.5) И (Pclass > 2.5) И (Age <= 13.0) то Importance равна -0.5;\n",
    "\"\"\".replace(\"Importance\", \"I\").replace(\"Sex\", \"A\").replace(\"Pclass\", \"B\").replace(\"Cabin\", \"C\").replace(\"Cabin\", \"D\").replace(\"Age\", \"E\").replace(\"Fare\", \"F\")\n",
    "\n",
    "temp = 0.3\n",
    "\n",
    "print(get_answer(system, user, temp))\n",
    "\n",
    "# for _ in [0.3, 0.6, 0.8]:\n",
    "#     print(_)\n",
    "#     print(get_answer(system, user, _))\n",
    "#     print('\\n\\n\\n\\n\\n')\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "8ec82e9e-cd59-40e8-9dcd-d8fe53753778",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "4f64b6fa-b7f3-4aab-b79c-bbc567504edb",
   "metadata": {},
   "outputs": [],
   "source": [
    "проанализируй правила из полученного набора и определи, какие из них наиболее важны для понимания влияния переменных датасета на изучаемую переменную в контексте модели классификации выживаемости оборудования\n",
    "Правила:\n",
    "1. Sex <= 0.5 & Pclass <= 2.5 -> Importance=2.294\n",
    "2. Sex <= 0.5 & Pclass > 2.5 -> Importance=1.495\n",
    "3. Sex > 0.5 & Pclass <= 2.5 -> Importance=-1.273\n",
    "4. Sex > 0.5 & Pclass > 2.5 -> Importance=-0.921"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "00c9722e-99b3-47d4-9fba-abdd6aa11138",
   "metadata": {},
   "outputs": [],
   "source": [
    "Опиши параметры оборудования,с повышенным шансом на выживание"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a69b6789-cc03-4ee4-8caa-8971399d97e2",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "7ce2421f-45d5-4ea5-9b1b-e7c1f5f7d311",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
